package com.system.service.monitor.logs.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.system.constant.HTTPStatus;
import com.system.entity.monitor.logs.SysLogininfor;
import com.system.mapper.monitor.logs.SysLogininforMapper;
import com.system.response.Result;
import com.system.response.monitor.logs.LogininforDtoResponse;
import com.system.service.monitor.logs.SysLogininforService;
import com.system.util.StringUtils;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

/**
 * @Classname SysLogininforServiceImpl
 * @Date 2023/8/3 13:54
 * @Created ZFC
 */
@Log4j
@Service
public class SysLogininforServiceImpl extends ServiceImpl<SysLogininforMapper, SysLogininfor> implements SysLogininforService {

    @Autowired
    private SysLogininforMapper logininforMapper;

    @Override
    public void insertLogininfor(SysLogininfor logininfor) {
        logininfor.setLoginTime(LocalDateTime.now());
        logininforMapper.insert(logininfor);
    }

    @Override
    public Result selectLogininforList(LogininforDtoResponse logininforDto) {
        if (logininforDto.getPageSize()==null || logininforDto.getPageSize()<0) logininforDto.setPageSize(1);
        if (logininforDto.getPageNum()==null || logininforDto.getPageNum()<10) logininforDto.setPageNum(10);

        PageHelper.startPage(logininforDto.getPageSize(),logininforDto.getPageNum());
        List<SysLogininfor> operLogList = logininforMapper.selectList(
                new LambdaQueryWrapper<SysLogininfor>()
                        .eq(StringUtils.isNotNull(logininforDto.getStatus()), SysLogininfor::getStatus, logininforDto.getStatus())
                        .ge(StringUtils.isNotEmpty(logininforDto.getStartTime()), SysLogininfor::getLoginTime, logininforDto.getStartTime())
                        .le(StringUtils.isNotEmpty(logininforDto.getEndTime()), SysLogininfor::getLoginTime, logininforDto.getEndTime())
                        .like(StringUtils.isNotEmpty(logininforDto.getIpaddr()), SysLogininfor::getIpaddr, logininforDto.getIpaddr())
                        .like(StringUtils.isNotEmpty(logininforDto.getUsername()), SysLogininfor::getUserName, logininforDto.getUsername())
                        .orderByDesc(SysLogininfor::getLoginTime)
        );
        PageInfo pageInfo = new PageInfo(operLogList);

        Integer count = logininforMapper.selectCount(
                new LambdaQueryWrapper<SysLogininfor>()
                        .eq(StringUtils.isNotNull(logininforDto.getStatus()), SysLogininfor::getStatus, logininforDto.getStatus())
                        .ge(StringUtils.isNotEmpty(logininforDto.getStartTime()), SysLogininfor::getLoginTime, logininforDto.getStartTime())
                        .le(StringUtils.isNotEmpty(logininforDto.getEndTime()), SysLogininfor::getLoginTime, logininforDto.getEndTime())
                        .like(StringUtils.isNotEmpty(logininforDto.getIpaddr()), SysLogininfor::getIpaddr, logininforDto.getIpaddr())
                        .like(StringUtils.isNotEmpty(logininforDto.getUsername()), SysLogininfor::getUserName, logininforDto.getUsername())

        );
        pageInfo.setSize(count);

        return new Result().setCode(HTTPStatus.SUCCESS).setData(pageInfo);
    }

    @Override
    public Result deleteLogininforByIds(Long[] ids) {
        for (Long id : Arrays.asList(ids)) {
            logininforMapper.delete(
                    new LambdaQueryWrapper<SysLogininfor>()
                            .eq(SysLogininfor::getInfoId,id)
            );
        }

        return new Result().setCode(HTTPStatus.SUCCESS).setMessage("删除成功!");
    }

    @Override
    public Result clearLogininfor() {
        logininforMapper.delete(new LambdaQueryWrapper<>());
        return new Result().setCode(HTTPStatus.SUCCESS).setMessage("删除成功!");
    }
}
